package com.atguigu.tingshu.user.strategy;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 工厂模式
 * 根据购买项目决定 使用哪个策略实现类对象
 * @Author: hsl
 * @CreateTime: 2025-03-10  13:25
 */
@Slf4j
@Component
public class StrategyFactory {
    //  注入一个map集合
    // key 是 购买项目类型1001,1002,1003......  value 是 购买项目类型 对应的策略实现类对象
    @Autowired
    private Map<String, ItemTypeStrategy> strategyMap;
    /**
     * 根据购买项目类型 获取对应的策略实现类对象
     */
    public ItemTypeStrategy getStrategy(String itemType) {
        // 根据购买项目类型 获取对应的策略实现类对象
        ItemTypeStrategy strategy = strategyMap.get(itemType);
        // 如果为空  抛出异常
        if (strategy == null) {
            log.error("找不到对应的策略实现类对象");
            throw new RuntimeException("找不到对应的策略实现类对象");
        }
        // 如果不为空  返回对应的策略实现类对象
        return strategy;
    }
}
